// use std::sync::Arc;
// use tokio::time;
// use tokio::sync::mpsc::{self, Sender};
// use tokio::sync::Mutex;
//
// struct Fork;
//
// struct Philosopher {
//     name: String,
//     // left_fork: ...
//     // right_fork: ...
//     thoughts: std::sync::mpsc::Sender<String>,
// }
//
// impl Philosopher {
//     async fn think(&self) {
//         self.thoughts
//             .send(format!("Eureka! {} has a new idea!", &self.name)).await
//             .unwrap();
//     }
//
//     async fn eat(&self) {
//         // Pick up forks...
//         println!("{} is eating...", &self.name);
//         time::sleep(time::Duration::from_millis(5)).await;
//     }
// }
//
// static PHILOSOPHERS: &[&str] =
//     &["Socrates", "Plato", "Aristotle", "Thales", "Pythagoras"];
//
// #[tokio::main]
// async fn main() {
//     // Create forks
//
//     // Create philosophers
//
//     // Make them think and eat
//
//     // Output their thoughts
// }